const express = require('express')
const passport = require('passport')

const router = express.Router()
const Todo = require('../../models/Todo')


/**
 * @router  /api/todo/add  post
 * @description 向todo列表中添加用户要做的事件
 * @access  private
 */
// 通过用户email，查询todo数据表，显示用户要做的事件
router.post('/add', passport.authenticate('jwt', {
  session: false
}), (req, res) => {

  const email = req.body.email
  const todo = req.body.todo
  // 分为4类，使用1、2、3、4代替
  // const classify = req.body.classify

  const date = new Date()
  const day = `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`
  const week = "星期" + "日一二三四五六日一二三四五六".charAt(new Date().getDay())

  Todo.findOne({
      email
    })
    .then(user => {
      if (!user) { // 如果没有找到该用户邮箱，说明该用户不存在，跳转到登录页面，几乎不会有这种情况
        return res.json({
          msg: '用户不存在...'
        })
      }

      // 如果找到该user
      if (todo === '') {
        return res.json({
          msg: 'todo不能为空'
        })
      } else {
        user.todos.push({
          todo,
          day,
          week
        })
      }

      user.save()
        .then(todo => {
          res.status(200).json(todo)
        })
        .catch(err => {
          throw err
        })
    })
})

/**
 * @router  /api/todo/ get
 * @description 获取todo列表中当前用户的所有待做事项
 * @access private
 */
router.get('/', passport.authenticate('jwt', {
  session: false
}), (req, res) => {
  Todo.findOne({
      email: req.user.email
    })
    .then(user => {
      if (!user) { // 如果没有找到该用户
        return res.json({
          msg: '没有找到该用户...'
        })
      }

      // 如果找到该用户
      res.status(200).json(user)
    })
    .catch(err => {
      throw err
    })
})


/**
 * @router  /api/todo/delete/:index  delete
 * @description todo列表中已经完成的待做事项
 * @access  private
 */
router.delete('/delete/:index', passport.authenticate('jwt', {
  session: false
}), (req, res) => {
  Todo.findOne({
      email: req.body.email
    })
    .then(user => {

      // 获取到要删除事项的索引值
      const index = req.params.index
      user.todos.splice(index, 1)

      user.save()
        .then(user => {
          res.status(200).json({
            msg: '删除成功...'
          })
        })
        .catch(err => {
          throw err
        })
    })
})

/**
 * @router  /edit/:index  post
 * @description 修改todo中的待办事项
 * @access  private
 */
router.post('/edit/:index', passport.authenticate('jwt', {
  session: false
}), (req, res) => {
  Todo.findOne({
      email: req.body.email
    })
    .then(user => {
      const index = req.params.index

      // 使用修改后的内容替换原来的内容
      user.todos.splice(index, 1, {
        ...user.todos[index],
        todo: req.body.edit
      })

      user.save()
        .then(user => {
          res.status(200).json({
            msg: '修改成功'
          })
        })
        .catch(err => {
          throw err
        })
    })
})


module.exports = router